#include <string>
#include <cmath>
#include "constants.h"
#include "orbitvirtualmachine.h"

void OVMBin1::nextCompiledStep()
{   m_index = 0;    m_index = 0;
    m_index = 1;
    sCopy( 0, 265);
    m_index = 2;
    m_index = 3;
    m_index = 4;
    sCopy( 0, 248);
    m_index = 5;
    dSub( 4, 3);
    m_index = 6;
    sCmpz( 2, 5);
    m_index = 7;
    dPhi( 2, 1);
    m_index = 8;
    dSub( 7, 0);
    m_index = 9;
    sCopy( 0, 263);
    m_index = 10;
    sCmpz( 2, 5);
    m_index = 11;
    dPhi( 0, 9);
    m_index = 12;
    dSub( 11, 0);
    m_index = 13;
    sCmpz( 2, 12);
    m_index = 14;
    dPhi( 8, 7);
    m_index = 15;
    sCopy( 0, 264);
    m_index = 16;
    m_index = 17;
    sCmpz( 2, 5);
    m_index = 18;
    dPhi( 16, 15);
    m_index = 19;
    m_index = 20;
    dMult( 18, 19);
    m_index = 21;
    sCmpz( 2, 12);
    m_index = 22;
    dPhi( 20, 18);
    m_index = 23;
    sCmpz( 2, 12);
    m_index = 24;
    dPhi( 18, 12);
    m_index = 25;
    sCopy( 0, 260);
    m_index = 26;
    sCopy( 0, 262);
    m_index = 27;
    m_index = 28;
    m_index = 29;
    dMult( 28, 16);
    m_index = 30;
    dDiv( 29, 27);
    m_index = 31;
    m_index = 32;
    sInput( 0, 16000);
    m_index = 33;
    dSub( 32, 31);
    m_index = 34;
    sCmpz( 2, 33);
    m_index = 35;
    dPhi( 30, 3);
    m_index = 36;
    m_index = 37;
    dDiv( 29, 36);
    m_index = 38;
    m_index = 39;
    dSub( 32, 38);
    m_index = 40;
    sCmpz( 2, 39);
    m_index = 41;
    dPhi( 37, 35);
    m_index = 42;
    dDiv( 29, 19);
    m_index = 43;
    m_index = 44;
    dSub( 32, 43);
    m_index = 45;
    sCmpz( 2, 44);
    m_index = 46;
    dPhi( 42, 41);
    m_index = 47;
    m_index = 48;
    dSub( 32, 47);
    m_index = 49;
    sCmpz( 2, 48);
    m_index = 50;
    dPhi( 29, 46);
    m_index = 51;
    sCmpz( 2, 5);
    m_index = 52;
    dPhi( 50, 26);
    m_index = 53;
    sCopy( 0, 255);
    m_index = 54;
    m_index = 55;
    m_index = 56;
    sCmpz( 2, 33);
    m_index = 57;
    dPhi( 55, 3);
    m_index = 58;
    sCmpz( 2, 39);
    m_index = 59;
    dPhi( 54, 57);
    m_index = 60;
    m_index = 61;
    sCmpz( 2, 44);
    m_index = 62;
    dPhi( 60, 59);
    m_index = 63;
    sCmpz( 2, 48);
    m_index = 64;
    dPhi( 54, 62);
    m_index = 65;
    sCmpz( 2, 5);
    m_index = 66;
    dPhi( 64, 53);
    m_index = 67;
    sCopy( 0, 250);
    m_index = 68;
    sCmpz( 2, 5);
    m_index = 69;
    dPhi( 3, 67);
    m_index = 70;
    dSub( 69, 66);
    m_index = 71;
    dMult( 70, 70);
    m_index = 72;
    sCopy( 0, 249);
    m_index = 73;
    sCmpz( 2, 5);
    m_index = 74;
    dPhi( 3, 72);
    m_index = 75;
    sCopy( 0, 254);
    m_index = 76;
    sCmpz( 2, 33);
    m_index = 77;
    dPhi( 54, 3);
    m_index = 78;
    m_index = 79;
    sCmpz( 2, 39);
    m_index = 80;
    dPhi( 78, 77);
    m_index = 81;
    m_index = 82;
    sCmpz( 2, 44);
    m_index = 83;
    dPhi( 81, 80);
    m_index = 84;
    m_index = 85;
    sCmpz( 2, 48);
    m_index = 86;
    dPhi( 84, 83);
    m_index = 87;
    sCmpz( 2, 5);
    m_index = 88;
    dPhi( 86, 75);
    m_index = 89;
    dSub( 74, 88);
    m_index = 90;
    dMult( 89, 89);
    m_index = 91;
    dAdd( 90, 71);
    m_index = 92;
    sSqrt( 0, 91);
    m_index = 93;
    dMult( 92, 92);
    m_index = 94;
    dMult( 93, 92);
    m_index = 95;
    sCopy( 0, 251);
    m_index = 96;
    m_index = 97;
    sCmpz( 2, 5);
    m_index = 98;
    dPhi( 96, 95);
    m_index = 99;
    m_index = 100;
    dMult( 99, 98);
    m_index = 101;
    dDiv( 100, 94);
    m_index = 102;
    dMult( 70, 101);
    m_index = 103;
    sInput( 0, 3);
    m_index = 104;
    dDiv( 0, 0);
    m_index = 105;
    dDiv( 103, 104);
    m_index = 106;
    dAdd( 105, 102);
    m_index = 107;
    dMult( 104, 104);
    m_index = 108;
    dDiv( 107, 19);
    m_index = 109;
    dMult( 106, 108);
    m_index = 110;
    sCopy( 0, 258);
    m_index = 111;
    m_index = 112;
    sCmpz( 2, 39);
    m_index = 113;
    dPhi( 111, 77);
    m_index = 114;
    m_index = 115;
    sCmpz( 2, 44);
    m_index = 116;
    dPhi( 114, 113);
    m_index = 117;
    m_index = 118;
    sCmpz( 2, 48);
    m_index = 119;
    dPhi( 117, 116);
    m_index = 120;
    sCmpz( 2, 5);
    m_index = 121;
    dPhi( 119, 110);
    m_index = 122;
    dMult( 121, 104);
    m_index = 123;
    dAdd( 66, 122);
    m_index = 124;
    dAdd( 123, 109);
    m_index = 125;
    dSub( 124, 69);
    m_index = 126;
    dMult( 125, 125);
    m_index = 127;
    dMult( 89, 101);
    m_index = 128;
    sInput( 0, 2);
    m_index = 129;
    dDiv( 128, 104);
    m_index = 130;
    dAdd( 129, 127);
    m_index = 131;
    dMult( 130, 108);
    m_index = 132;
    sCopy( 0, 257);
    m_index = 133;
    m_index = 134;
    sCmpz( 2, 33);
    m_index = 135;
    dPhi( 133, 3);
    m_index = 136;
    sCmpz( 2, 39);
    m_index = 137;
    dPhi( 54, 135);
    m_index = 138;
    sCmpz( 2, 44);
    m_index = 139;
    dPhi( 114, 137);
    m_index = 140;
    sCmpz( 2, 48);
    m_index = 141;
    dPhi( 54, 139);
    m_index = 142;
    sCmpz( 2, 5);
    m_index = 143;
    dPhi( 141, 132);
    m_index = 144;
    dMult( 143, 104);
    m_index = 145;
    dAdd( 88, 144);
    m_index = 146;
    dAdd( 145, 131);
    m_index = 147;
    dSub( 146, 74);
    m_index = 148;
    dMult( 147, 147);
    m_index = 149;
    dAdd( 148, 126);
    m_index = 150;
    sSqrt( 0, 149);
    m_index = 151;
    dSub( 150, 52);
    m_index = 152;
    dSub( 3, 151);
    m_index = 153;
    dSub( 151, 3);
    m_index = 154;
    sCmpz( 0, 153);
    m_index = 155;
    dPhi( 152, 151);
    m_index = 156;
    dAdd( 25, 155);
    m_index = 157;
    dMult( 105, 105);
    m_index = 158;
    dMult( 129, 129);
    m_index = 159;
    dAdd( 158, 157);
    m_index = 160;
    sSqrt( 0, 159);
    m_index = 161;
    dSub( 160, 3);
    m_index = 162;
    sCmpz( 2, 161);
    m_index = 163;
    dPhi( 156, 3);
    m_index = 164;
    dSub( 155, 16);
    m_index = 165;
    sCmpz( 0, 164);
    m_index = 166;
    dPhi( 163, 3);
    m_index = 167;
    dSub( 69, 124);
    m_index = 168;
    dMult( 167, 167);
    m_index = 169;
    dSub( 74, 146);
    m_index = 170;
    dMult( 169, 169);
    m_index = 171;
    dAdd( 170, 168);
    m_index = 172;
    sSqrt( 0, 171);
    m_index = 173;
    dMult( 172, 172);
    m_index = 174;
    dMult( 173, 172);
    m_index = 175;
    dDiv( 100, 174);
    m_index = 176;
    dMult( 167, 175);
    m_index = 177;
    dAdd( 176, 102);
    m_index = 178;
    dDiv( 177, 19);
    m_index = 179;
    dAdd( 105, 178);
    m_index = 180;
    dMult( 179, 104);
    m_index = 181;
    dAdd( 121, 180);
    m_index = 182;
    dMult( 169, 175);
    m_index = 183;
    dAdd( 182, 127);
    m_index = 184;
    dDiv( 183, 19);
    m_index = 185;
    dAdd( 129, 184);
    m_index = 186;
    dMult( 185, 104);
    m_index = 187;
    dAdd( 143, 186);
    m_index = 188;
    sCopy( 0, 256);
    m_index = 189;
    m_index = 190;
    sCmpz( 2, 33);
    m_index = 191;
    dPhi( 189, 3);
    m_index = 192;
    sCmpz( 2, 39);
    m_index = 193;
    dPhi( 189, 191);
    m_index = 194;
    sCmpz( 2, 44);
    m_index = 195;
    dPhi( 189, 193);
    m_index = 196;
    sCmpz( 2, 48);
    m_index = 197;
    dPhi( 189, 195);
    m_index = 198;
    sCmpz( 2, 5);
    m_index = 199;
    dPhi( 197, 188);
    m_index = 200;
    sCopy( 0, 253);
    m_index = 201;
    sCmpz( 2, 5);
    m_index = 202;
    dPhi( 3, 200);
    m_index = 203;
    sCopy( 0, 252);
    m_index = 204;
    sCmpz( 2, 5);
    m_index = 205;
    dPhi( 3, 203);
    m_index = 206;
    dAdd( 4, 0);
    m_index = 207;
    sCopy( 0, 259);
    m_index = 208;
    dAdd( 207, 0);
    m_index = 209;
    sCmpz( 2, 161);
    m_index = 210;
    dPhi( 208, 3);
    m_index = 211;
    sCmpz( 0, 164);
    m_index = 212;
    dPhi( 210, 3);
    m_index = 213;
    sCopy( 0, 261);
    m_index = 214;
    m_index = 215;
    sCmpz( 2, 5);
    m_index = 216;
    dPhi( 214, 213);
    m_index = 217;
    dMult( 160, 104);
    m_index = 218;
    dSub( 216, 217);
    m_index = 219;
    m_index = 220;
    m_index = 221;
    dSub( 214, 218);
    m_index = 222;
    dDiv( 221, 214);
    m_index = 223;
    dMult( 222, 220);
    m_index = 224;
    dAdd( 7, 223);
    m_index = 225;
    dAdd( 224, 219);
    m_index = 226;
    m_index = 227;
    dDiv( 226, 104);
    m_index = 228;
    dSub( 227, 212);
    m_index = 229;
    sCmpz( 0, 228);
    m_index = 230;
    dPhi( 225, 3);
    m_index = 231;
    dSub( 218, 3);
    m_index = 232;
    dSub( 242, 0);
    m_index = 233;
    sCmpz( 0, 231);
    m_index = 234;
    dPhi( 232, 230);
    m_index = 235;
    dSub( 214, 217);
    m_index = 236;
    sCmpz( 0, 235);
    m_index = 237;
    dPhi( 232, 234);
    m_index = 238;
    m_index = 239;
    dSub( 150, 238);
    m_index = 240;
    sCmpz( 0, 239);
    m_index = 241;
    dPhi( 232, 237);
    m_index = 242;
    m_index = 243;
    dOutput( 0, 241);
    m_index = 244;
    dOutput( 1, 218);
    m_index = 245;
    dOutput( 2, 169);
    m_index = 246;
    dOutput( 3, 167);
    m_index = 247;
    dOutput( 4, 52);
    m_index = 248;
    sCopy( 0, 206);
    m_index = 249;
    sCopy( 0, 74);
    m_index = 250;
    sCopy( 0, 69);
    m_index = 251;
    sCopy( 0, 98);
    m_index = 252;
    sCopy( 0, 205);
    m_index = 253;
    sCopy( 0, 202);
    m_index = 254;
    sCopy( 0, 146);
    m_index = 255;
    sCopy( 0, 124);
    m_index = 256;
    sCopy( 0, 199);
    m_index = 257;
    sCopy( 0, 187);
    m_index = 258;
    sCopy( 0, 181);
    m_index = 259;
    sCopy( 0, 212);
    m_index = 260;
    sCopy( 0, 166);
    m_index = 261;
    sCopy( 0, 218);
    m_index = 262;
    sCopy( 0, 52);
    m_index = 263;
    sCopy( 0, 24);
    m_index = 264;
    sCopy( 0, 22);
    m_index = 265;
    sCopy( 0, 14);
    m_index = 266;
    statsOutput();
    m_count++;
}

std::string OVMBin1::getStatusString()
{
    static char buff[1024];
    double
            score = m_outReg[OP_SCORE],
            fuel = m_outReg[OP_FUEL],
            sx = m_outReg[OP_SPACE_X],
            sy = m_outReg[OP_SPACE_Y],
            radiusTarget = m_outReg[OP_TARGET_R];
    double radiusCurrent = sqrt(sx*sx + sy*sy);
    sprintf(buff, "Step: %4d Score: %4.1f Fuel: %8.1f sx= %8.1f sy= %8.1f sr = %8.1f target = %8.1f \n",
         m_count,
         score,
         fuel,
         sx,
         sy,
         radiusCurrent,
         radiusTarget);
    return std::string(buff);
}
